package com.wuwenxu.codecamp.base.arithmetic.jzoffer;
import java.util.*;

/**
 * 连续子数组的最大和
 *
 * HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。
 * 今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,
 * 当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢？
 * 例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。
 * 给一个数组，返回它的最大连续子序列的和，你会不会被他忽悠住？(子向量的长度至少是1)
 */
public class FindGreatestSumOfSubArray {
        public int FindGreatestSumOfSubArray(int[] array) {
            int len = array.length;
            int maxSum =java.lang.Integer.MIN_VALUE;//起初赋值为0,则输入样例全是负数的情况下,代码不通过
            for(int i=0;i<len;i++){//每一个可能开始的点
                int temp =0; //为了改进上一方法的第9行代码,需要提前赋值
                for(int j=i;j<len;j++){//每个可能结束的点
                    temp+=array[j];
                    if(temp>maxSum) maxSum = temp;
                }
            }
            return maxSum;
        }
}
